gnome-remote-desktop 配置

十月 25, 2025 更新: 九月 11, 2026 [桌面与效率] #gnome #rdp

命令行查看配置

gsettings list-recursively | grep remote-desktop
systemctl --user stop gnome-remote-desktop

# 但是我尝试了多种方法最后生成的都是openssh格式的私钥key???!!!
# 生成新的密钥(确保是PEM格式)
openssl genrsa -out ~/.local/share/gnome-remote-desktop/rdp-tls.key 2048
# 使用 openssl 明确生成 PEM 格式 
openssl genpkey -algorithm RSA -out ~/.local/share/gnome-remote-desktop/rdp-tls.key -pkeyopt rsa_keygen_bits:2048
# 生成证书
openssl req -new -x509 -key ~/.local/share/gnome-remote-desktop/rdp-tls.key -out ~/.local/share/gnome-remote-desktop/rdp-tls.crt -days 3650 -subj "/C=CN/ST=State/L=City/O=Organization/CN=$(hostname)"

# 设置密钥和证书(如果证书已经设置过,可以不用再设置,但为了确保,可以重新设置一次)
grdctl rdp set-tls-key ~/.local/share/gnome-remote-desktop/rdp-tls.key
grdctl rdp set-tls-cert ~/.local/share/gnome-remote-desktop/rdp-tls.crt
grdctl status
grdctl --help
systemctl --user start gnome-remote-desktop

# 如果反复遇到 RDP 证书问题,最省时省力的方式是关闭 RDP,启用 VNC:
# 更正(2026-09-11 实测,grd 48):schema key 是 enable 不是 enabled;
# vnc schema 也没有 password 键了(密码改由 grdctl 写 keyring)
gsettings set org.gnome.desktop.remote-desktop.rdp enable false
gsettings set org.gnome.desktop.remote-desktop.vnc enable true
grdctl vnc set-password   # 交互式输入,VNC 密码最长 8 字符
systemctl --user restart gnome-remote-desktop


# 禁用屏幕自动锁定
gsettings set org.gnome.desktop.screensaver lock-enabled false
# 设置屏幕空白时间为从不
gsettings set org.gnome.desktop.session idle-delay 0
gsettings set org.gnome.desktop.screensaver idle-activation-enabled false
# 禁用自动挂起
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing'

# GNOME 45+ 的 gnome-remote-desktop 在 RDP 模式下不会主动防止系统挂起。 因此你还需要告诉 logind 保持唤醒状态:
# 这可以防止合盖(或外接显示器断开)时触发挂起。
sudo sed -i 's/^#\?HandleLidSwitch=.*/HandleLidSwitch=ignore/' /etc/systemd/logind.conf
sudo sed -i 's/^#\?HandleLidSwitchDocked=.*/HandleLidSwitchDocked=ignore/' /etc/systemd/logind.conf
sudo systemctl restart systemd-logind

其他资料的补充

# 以目标用户身份设置 GNOME 配置(关键!) # 切换到你的桌面用户(例如 peter)
sudo -u peter dbus-run-session -- bash
# dbus-run-session 确保 D-Bus 会话可用,否则 gsettings 可能失效。 

# 禁用自动锁屏
gsettings set org.gnome.desktop.screensaver lock-enabled false

# 禁用屏幕休眠(设为 0 表示永不)
gsettings set org.gnome.desktop.session idle-delay 0

# 禁用显示器自动关闭(设为 0 表示永不)
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing'

# 禁用屏幕变黑(DPMS)
gsettings set org.gnome.desktop.session idle-delay 0
gsettings set org.gnome.settings-daemon.plugins.power idle-dim false

sudo tee /etc/systemd/logind.conf.d/90-disable-suspend.conf <<EOF
[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore
IdleAction=ignore
IdleActionSec=0
EOF
sudo systemctl restart systemd-logind

# GNOME 会检测是否有“活跃会话”。如果你使用的是 GNOME 内置远程桌面(gnome-remote-desktop),它默认应被视为活跃。
# 更正(2026-09-11 实测):org.gnome.mutter 没有 idle-monitor 这个键,下面这条命令无效已删除;
# GNOME 45+ 下 grd 自身不抑制空闲(源码无 Inhibit 逻辑)。需要 RDP 期间防锁屏应走
# org.gnome.SessionManager.Inhibit(flags=8 即 GSM_INHIBITOR_FLAG_IDLE) 或直接关闭自动锁屏。

# 系统级别的阻止系统挂起: 遇到过问题 sleep.target 会刷大量warning日志
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
# 程序运行时临时阻止系统挂起
systemd-inhibit --what=idle:sleep:shutdown --who="Reason" --why="Explanation" /path/to/command 
systemd-inhibit --what=idle:sleep:shutdown --who="Keep up" --why="Preventing sleep" /usr/bin/htop
systemd-inhibit --list

ssh登录后的全流程配置

USERNAME=peter
UID=$(id -u $USERNAME)
export XDG_RUNTIME_DIR=/run/user/$UID
export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus

# 安装(Ubuntu/Debian)
sudo apt update
sudo apt install -y gnome-remote-desktop winpr-utils

# 生成证书并配置
sudo -u $USERNAME -- sh -c 'mkdir -p ~/.local/share/gnome-remote-desktop && \
  winpr-makecert -silent -rdp -path ~/.local/share/gnome-remote-desktop rdp-tls'

sudo -u $USERNAME -- bash -c '
  grdctl rdp set-tls-key ~/.local/share/gnome-remote-desktop/rdp-tls.key
  grdctl rdp set-tls-cert ~/.local/share/gnome-remote-desktop/rdp-tls.crt
  grdctl rdp set-credentials '"'"$USERNAME"'"' '"'"'StrongP@ssw0rd'"'"'
  grdctl rdp enable
  grdctl rdp disable-view-only
  systemctl --user enable --now gnome-remote-desktop.service
'

修复密钥环解锁失败

删除/重建 login 密钥环(最直接)

如果你不在意旧的保存内容,可以直接删除密钥环并重新生成:

mv ~/.local/share/keyrings/login.keyring ~/.local/share/keyrings.bak

同步密码(如果你知道旧密码)

如果你确定旧密码是 “OldPass”,新密码是 “NewPass”, 可以用 GNOME Keyring 工具同步(需要临时图形环境):

seahorse

然后右键 “登录” → “更改密码”,输入旧密码 + 新密码同步。 之后 CLI 方式的 grdctl 输入新密码就能正确验证。

手动启动 gnome-keyring-daemon(SSH 环境)

eval $(gnome-keyring-daemon --start --components=secrets,pkcs11,ssh,gpg)
export GNOME_KEYRING_CONTROL
export GNOME_KEYRING_PID
export SSH_AUTH_SOCK

完全跳过 keyring(临时、测试用)

GNOME Remote Desktop 没有官方参数能跳过 keyring保存,但可以用一种“hack”方式:

# 仅限测试环境!!
export GNOME_KEYRING_CONTROL=/tmp/fake-keyring
mkdir -p $GNOME_KEYRING_CONTROL
grdctl rdp set-credentials <user> <password>

这会创建一个临时未加密 keyring 存储(适合容器或测试机), 重启后失效,但能避免“解锁密钥环”弹窗。